package com.framework.service.system;

import com.framework.common.model.menu.MenuModel;
import com.framework.common.model.response.R;
import com.framework.model.system.vo.SystemRoleMenuVo;

import java.util.List;
import java.util.Map;

/**
 * @author 龘鵺
 * @version 1.0
 * @className com.framework.service.system
 * @description 角色菜单关联业务接口类
 * @datetime 2019-01-09 11:11:11
 */
public interface SystemRoleMenuService {

    /**
     * @param row 1 角色菜单关联实体类对象
     * @return int 大于等于1成功， 0失败
     * @title 公共根据角色编号和菜单编号集合物理批量删除
     * @description 公共根据角色编号和菜单编号集合物理批量删除
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    int deleteList(SystemRoleMenuVo row);

    /**
     * @param roleId 1 角色编号
     * @return int 大于等于1成功， 0失败
     * @title 公共根据角色编号物理删除关联数据
     * @description 公共根据角色编号物理删除关联数据
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    int deleteRoleId(Long roleId);

    /**
     * @param row 1 角色菜单关联实体类对象
     * @return int 大于0成功，小于等于0失败
     * @title 公共添加
     * @description 公共添加
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    int insert(SystemRoleMenuVo row);

    /**
     * @param row 1 角色菜单关联实体类对象
     * @return int 大于0成功，小于等于0失败
     * @title 公共非空字段验证添加
     * @description 公共非空字段验证添加
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    int insertSelective(SystemRoleMenuVo row);

    /**
     * @param list 1 角色菜单关联批量添加集合
     * @return int 返回成功数量
     * @title 公共批量添加
     * @description 公共批量添加
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    int insertList(List<SystemRoleMenuVo> list);

    /**
     * @param row 1 角色菜单关联实体类对象
     * @return java.util.List<java.lang.Long>
     * @title 公共根据条件查询菜单编号集合
     * @description 公共根据条件查询菜单编号集合
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    List<Long> findByMenuIdList(SystemRoleMenuVo row);

    /**
     * @param row 1 角色菜单关联实体类对象
     * @return java.util.List<com.framework.model.system.vo.SystemRoleMenuVo>
     * @title 公共根据条件查询存在集合
     * @description 公共根据条件查询存在集合
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    List<SystemRoleMenuVo> findByIsExistList(SystemRoleMenuVo row);

    /**
     * @param roleId 1 角色编号
     * @return java.util.List<com.framework.model.system.vo.SystemRoleMenuVo>
     * @title 公共根据角色编号查询菜单代码集合
     * @description 公共根据角色编号查询菜单代码集合
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    List<SystemRoleMenuVo> findByRoleIdListMenuCode(Long roleId);

    /**
     * @param menuId 1 菜单编号
     * @return java.util.List<com.framework.model.system.SystemRoleMenuVo>
     * @title 公共根据菜单编号查询角色代码集合
     * @description 公共根据菜单编号查询角色代码集合
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    List<SystemRoleMenuVo> findByMenuIdListRoleCode(Long menuId);

    /**
     * @param row 1 角色菜单关联实体类对象
     * @return java.util.List<com.framework.model.system.vo.SystemRoleMenuVo>
     * @title 公共根据条件查询集合
     * @description 公共根据条件查询集合
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    List<SystemRoleMenuVo> findByList(SystemRoleMenuVo row);

    /**
     * @param row 1 角色菜单关联实体类对象
     * @return java.util.List<com.framework.model.system.vo.SystemRoleMenuVo>
     * @title 初始化查询
     * @description 初始化查询
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    List<SystemRoleMenuVo> findByInitList(SystemRoleMenuVo row);

    /**
     * @param roleId     1 角色编号
     * @param menuIdList 2 菜单编号集合
     * @return com.framework.common.model.response.R
     * @title 本类后台管理添加方法
     * @description 本类后台管理添加方法
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    R<?> save(Long roleId, List<Long> menuIdList);

    /**
     * @param row 1 角色菜单关联实体类对象
     * @return com.framework.common.model.response.R
     * @title 根据条件查询数据集合
     * @description 根据条件查询数据集合
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    R<?> findByParamList(SystemRoleMenuVo row);

    /**
     * @param roleId  1 角色编号
     * @param id      2 菜单编号
     * @param pId     3 菜单上级编号
     * @param keyword 4 搜索条件
     * @return com.framework.common.model.response.R
     * @title 根据条件查询树形菜单集合
     * @description 根据条件查询树形菜单集合
     * @author 龘鵺
     * @datetime 2019-01-09 11:11:11
     */
    R<?> findMenuTreeList(Long roleId, Long id, Long pId, String keyword);

    /**
     * @param roleId 1 角色编号
     * @return java.util.List<com.framework.common.model.menu.MenuModel>
     * @title 根据角色编号处理菜单层级
     * @description 根据角色编号处理菜单层级
     * @author 龘鵺
     * @datetime 2022-01-09 11:11:11
     */
    List<MenuModel> findMenuList(Long roleId);

    /**
     * @param roleId 1 角色编号
     * @return java.util.Map
     * @title 根据角色编号查询菜单数据
     * @description 根据角色编号查询菜单数据
     * @author 龘鵺
     * @datetime 2022-01-09 11:11:11
     */
    Map findMenuList2(Long roleId);

}
